草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 函数模板重载解决方案和编译器优化

我正在看这里发现的这个问题TemplatefunctionoverloadfortypecontainingatypeOPuser2079802为他/她的问题提供此代码:I'mtryingtodothefollowing:#include#include#includetemplatevoidf(Tt){std::coutvoidf(T>t){std::cout{});//shouldusefirsttemplatef(std::vector>{});//shouldusesecondtemplate}WhatisthesimplestwaytodothisinC++14?Ithoug

c++ - 二元重载运算符=

所以我尝试使用std::ostream_iterator和std::iostream_iterator写入和读取文件。写作过程很好,没有任何错误。但至于阅读,我迷路了。我的错误是:1>c:\programfiles(x86)\microsoftvisualstudio14.0\vc\include\xutility(2316):errorC2678:binary'=':nooperatorfoundwhichtakesaleft-handoperandoftype'constWRstruct'(orthereisnoacceptableconversion)它说:c:\users\xx

c++ - 模板函数重载(泛型 vs 模板模板类型)选择正确的重载

我有一个模板函数,只要模板类型是数字,它就会对给定值执行某些操作:templatevoidfunction(scalar_tvalue){ifconstexpr(std::is_floating_point_v){std::cout){std::cout这个模板的重载需要一个包含数字的容器:templateclasscontainer_t>voidfunction(constcontainer_t&container){for(constauto&value:container){function(value);std::cout使用上面的模板,我调用以下代码:intmain(){fu

c++ - 如何编码和重载返回自身的函数? C++17

使用最新的msvc(截至25DEC17)。templateautoout_(constT&val_){//dosomethingwithval_//error:cannotdeduceautofromout_returnout_;}问题是如何编写代码,然后对上面这个小“东西”写几个重载?对,必须是msvc和C++17。没有GCC7.0.2也不编译它。clang还没试过。也许仿函数模式可能有所帮助?请指教... 最佳答案 我很惊讶您的lambda解决方案可以与g++一起使用。clang++投诉error:variable'out_'d

c++ - 模板重载导致链接器错误/奇怪的行为

使用以下最小示例,我在visualstudio15.8.7(具有标准设置的标准控制台应用程序(仅删除预编译header))中的本地系统上出现链接器错误:“错误LNK1179文件无效或损坏:COMDAT重复??$f@H@@YAXH@Z'"#includetemplatevoidf(T){printf("1");}//#1.Tcanbededucedtemplatevoidf(int){printf("2");}//#2.Tneedstobespecifiedexplicitlyintmain(){f(8);//a)calls#1f(8);//b)calls#2}注释掉调用a)或调用b)将

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

问题我写了一段可以编译的复杂模板代码withGCC8.2.1,但不是withClang7.0(代码和错误链接)。我认为这可能是thisQ&A的暗示,但我看不到它。动机我正在编写一个类,我希望它可以用两个不同类型的可调用对象构造,但也可以省略其中一个,即:my_class(callable_1);my_class(callable_2);my_class(callable_1,callable_2);那应该没有问题。但是,为什么不允许callable_1和callable_2成为函数模板(或带有operator()模板的仿函数)。也就是说,我想要这个(或者至少最初想要):my_class

c++ - initializer_list函数重载的解决

#includeusingnamespacestd;classA{public:explicitA(constinitializer_list&a){}};voidfunc(constvector&a){}voidfunc(Aa){}intmain(void){func({1,2,3});}此代码编译失败:(19):errorC2668:'func':ambiguouscalltooverloadedfunction(13):note:couldbe'voidfunc(A)'(9):note:or'voidfunc(conststd::vector>&)'with[_Ty=int](1

Java_方法(重载方法签名等详解)

在之前我们学习C语言时,当我们想要重复使用某段代码的功能时,我们会将这段代码定义为一个函数,而在java中我们把这段重复使用的代码叫做方法。方法的定义类体的内容分为变量的声明和方法的定义,方法的定义包括两部分:方法头和方法体。//方法定义修饰符返回值类型方法名称([参数类型形参...]){方法体代码;[return返回值];}举个例子:检验一个年份是否为闰年publicclassMethod{publicstaticbooleanLeapYear(intyear){if((year%4==0&&year%100!=0)||year%400==0)){returntrue;}else{retur

c++ - 使用运算符重载 c++ 进行监控

我想编写一个所有运算符都重载的包装类,这样我就可以检测到我们何时写入/读取或修改其内容。例如:probex;x=5;//writeif(x){//readx+=7;//modify}有人做过吗?如果不是,我必须重载哪些运算符以确保我不会错过任何东西? 最佳答案 将此作为一个共同的想法。有很多像and=|=[]这样的运算符在你的情况下可能不是主要的。templatestructmonitor{monitor(constT&data):data_(data){id_=get_next_monitor_id();}monitor(cons

c++ - 创建类索引器 operator[] 允许字符串参数(字符串索引)

我想用C++创建一个类。此类必须使用集合进行管理。好的,没问题,我当然想使用operator[],但在这种情况下,我希望不是按位置索引,而是按名称索引==>这意味着使用字符串索引器。似乎这种东西对我的编译器不太友好://Inhppclassmyclass{......std::stringoperator[](conststd::string&name);}//Incppstd::stringmyclass::operator[](conststd::string&name){...}//Inmainmyclassm;std::stringvalue=m["Name"];编译器告诉我他